

#ifndef    RTE_H
#define    RTE_H

/***********************************************************************************************************************
**                                                    Includes                                                        **
***********************************************************************************************************************/
#include "Std_Types.h"


/***********************************************************************************************************************
**                                                  Global Symbols                                                    **
***********************************************************************************************************************/


/***********************************************************************************************************************
**                                                Global Data Types                                                   **
***********************************************************************************************************************/


/***********************************************************************************************************************
**                                                    Global Data                                                     **
***********************************************************************************************************************/



/***********************************************************************************************************************
**                                    Rte Interface, Called by ASW.                                                   **
***********************************************************************************************************************/
/**
  * @brief  读取电池单体电压
  * @param  单体电池的ID，范围：0-31
  * @retval 指定ID的电池电压采样值，范围0-65535，换算公式：V=R*(5/32),单位：mV
  */
uint16 Rte_Read_CellV_IN(uint8 id);

/**
  * @brief  读取单体温度，包括AFE芯片读取的温度（ID范围:0-5）+MCU读取的温度(ID范围:6-11）
  * @param  采样温度的ID，范围：0-11；AFE采样的温度ID范围为0-5，MCU采样的温度ID范围为6-11
  * @retval 指定ID的温度采样值；
            AFE：范围0-65535，换算公式：电阻=(R/(32768-R))*Ref（Ref通过Rte_Read_Temp_Ref接口获取）,单位：kΩ；
            MCU：范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_CellT_AD_IN(uint8 id);

/**
  * @brief  读取温度参考值
  * @param  无
  * @retval 范围0-127，换算公式：Ref=6.8+0.05*R，单位：kΩ
  */
uint16 Rte_Read_Temp_Ref(uint8 channel);

/**
  * @brief  读取单体电压采样的有效性
  * @param  无
  * @retval 范围0-1，0：有效，1：无效
  */
uint8 Rte_Read_CellV_Valid(void);

/**
  * @brief  读取单体温度采样的有效性
  * @param  无
  * @retval 范围0-1，0：有效，1：无效
  */
uint8 Rte_Read_CellT_Valid(void);

/**
  * @brief  读取均衡通道状态
  * @param  channel AFE通道
  * @retval 范围0-1，0：通道均衡，1：通道未均衡
  */
uint32 Rte_Read_Balance_State(void);

/**
  * @brief  发送均衡通道命令
  * @param  channel范围0-1：分别对应AFE1，AFE2
  * @retval 无
  */
void Rte_Write_Balance_Cmd(uint32 state); 

/**
  * @brief  读取放电MOS状态
  * @param  无
  * @retval 范围0-1，0：MOS打开，1：MOS关闭
  */
uint8 Rte_Read_DischrgMOS_State(void);

/**
  * @brief  读取充电MOS状态
  * @param  无
  * @retval 范围0-1，0：MOS打开，1：MOS关闭
  */
uint8 Rte_Read_ChrgMOS_State(void);

/**
  * @brief  读取电池电压
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V；（需要根据分压电阻再次换算一次得到真实的电池电压）
  */
uint16 Rte_Read_BatVol(void);

/**
  * @brief  读取分流器AD值
  * @param  无
  * @retval xxx
  */
uint16 Rte_Read_Current_Shut_AD(uint8 channel);

/**
  * @brief  读取电流效性
  * @param  无
  * @retval xxx
  */
uint8 Rte_Read_Current_Valid(void);

/**
  * @brief  读取初始化状态
  * @param  无
  * @retval 范围0-1，0：初始化完成，1：初始化未完成
  */
uint8 Rte_Read_INI_Finish_flg(void);

/**
  * @brief  读取PCB温度
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_PCB_AD_R(void);

/**
  * @brief  读取充电座正极温度
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_ChrgPos_AD_R(void);

/**
  * @brief  读取充电座负极温度
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_ChrgNeg_AD_R(void);

/**
  * @brief  读取ICU报文是否丢失
  * @param  无
  * @retval 范围0-1，0：未丢失，1：丢失
  */
uint8 Rte_Read_ICU_lost_flg(void);

/**
  * @brief  读取TBOX报文是否丢失
  * @param  无
  * @retval 范围0-1，0：未丢失，1：丢失
  */
uint8 Rte_Read_TBOX_lost_flg(void);

/**
  * @brief  读取BCM报文是否丢失
  * @param  无
  * @retval 范围0-1，0：未丢失，1：丢失
  */
uint8 Rte_Read_BCM_lost_flg(void);

/**
  * @brief  读取INV报文是否丢失
  * @param  无
  * @retval 范围0-1，0：未丢失，1：丢失
  */
uint8 Rte_Read_INV_lost_flg(void);

/**
  * @brief  读取OBC报文是否丢失
  * @param  无
  * @retval 范围0-1，0：未丢失，1：丢失
  */
uint8 Rte_Read_OBC_lost_flg(void);

/**
  * @brief  读取ACAN是否BUSOFF
  * @param  无
  * @retval 范围0-1，0：未BUSOFF，1：BUSOFF；
  */
uint8 Rte_Read_ACAN_BUSOFF_flg(void);

/**
  * @brief  读取CHCAN是否BUSOFF
  * @param  无
  * @retval 范围0-1，0：未BUSOFF，1：BUSOFF；
  */
uint8 Rte_Read_CHCAN_BUSOFF_flg(void);

/**
  * @brief  读取分流器温度
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_Shunt_Temp_AD(void);

/**
  * @brief  设置AFE运行模式
  * @param  0：normal，1：idle，2：sleep
  * @retval 无
  */
void Rte_Write_AFE_RunMode(uint8 mode);

/**
  * @brief  读取CC2
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_CC2_AD(void);

/**
  * @brief  读取A+
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_AP(void);

/**
  * @brief  读取互锁状态
  * @param  无
  * @retval 范围0-1，0：插接插件，1：插接插件
  */
uint8 Rte_Read_Interlock_State(void);

/**
  * @brief  读取供电电压
  * @param  无
  * @retval 范围0-4095，换算公式：V=(R/4095)*3.3，单位：V
  */
uint16 Rte_Read_Supply_Vol(void);

/**
  * @brief  读取放电MOS状态
  * @param  无
  * @retval 范围0-1，根据真值表确定是否插枪
  */
uint8 Rte_Read_DisCharge_State(void);

/**
  * @brief  读取插枪状态
  * @param  无
  * @retval 范围0-1，根据真值表确定是否插枪
  */
uint8 Rte_Read_Charge_State(void);

/**
  * @brief  设置欠压阈值
  * @param  data 欠压值
  * @retval 范围0-255，欠压值=寄存器值*20mV
  */
void Rte_Write_UnderVoltageTh(uint8 data);


/**
  * @brief  放电MOS控制
  * @param  范围0-1，0：open，1：close
  * @retval 无
  */
void Rte_Write_DisChrg_MOS_Control(uint8 cmd);

/**
  * @brief  充电MOS控制
  * @param  范围0-1，0：open，1：close
  * @retval 无
  */
void Rte_Write_Chrg_MOS_Control(uint8 cmd);

/**
  * @brief  DC继电器控制
  * @param  范围0-1，0：open，1：close
  * @retval 无
  */
void Rte_Write_DC_Contact_Control(uint8 cmd);

/**
  * @brief  放电过流保护状态
  * @param  channel AFE通道
  * @retval 范围0-1，0：未发生过流保护，1：发生过流保护
  */
uint8 Rte_Read_AFE_OCDSta(uint8 channel);

/**
  * @brief  充电过流保护状态
  * @param  channel AFE通道
  * @retval 范围0-1，0：未发生过流保护，1：发生过流保护
  */
uint8 Rte_Read_AFE_OCCSta(uint8 channel);



/**
  * @brief  读EEPROM数据
  * @param  p：读取数据待存放数组的首地址，len：读取长度（长度范围1-256）
  * @retval 读取结果，0：读取成功，1：读取失败
  */
uint8 Rte_Read_EEData(uint8 *p, uint16 len);

/**
  * @brief  写EEPROM数据，所有待存储数据一次性写入
  * @param  p：写入数据首地址，len：写入长度（长度范围1-256）
  * @retval 写入结果，0：写入成功，1：写入失败
  */
uint8 Rte_Write_EEData(uint8 *p, uint16 len);


/**
  * @brief  接收CAN数据
  * @param  canx：CAN通道，0：ACAN，1：CHCAN；id：报文ID；data：报文数据；len：数据长度
  * @retval 接收结果，0：接收成功，1：接收失败
  */
uint8 RTE_CAN_RecvCanDataById(uint8 canx, uint32 id, uint8 *data, uint8 *len);

/**
  * @brief  发送CAN数据
  * @param  canx：CAN通道，0：ACAN，1：CHCAN；id：报文ID；data：报文数据；len：数据长度
  * @retval 无
  */
void RTE_CAN_SendCanDataById(uint8 canx, uint32 id, uint8 * data, uint8 Len);


/**
  * @brief  读写DID
  * @param  p 数据指针； len 数据长度
  * @retval 无
  */
void Rte_Send_DID_F190(uint8 *p, uint8 len);
uint8 Rte_Get_DID_F190(uint8 *p, uint8 len);
void Rte_Send_DID_0301(uint8 *p, uint8 len);
void Rte_Send_DID_0302(uint8 *p, uint8 len);
void Rte_Send_DID_0303(uint8 *p, uint8 len);
void Rte_Send_DID_0304(uint8 *p, uint8 len);
void Rte_Send_DID_0305(uint8 *p, uint8 len);
void Rte_Send_DID_0306(uint8 *p, uint8 len);
void Rte_Send_DID_0307(uint8 *p, uint8 len);
void Rte_Send_DID_0308(uint8 *p, uint8 len);
void Rte_Send_DID_0309(uint8 *p, uint8 len);
void Rte_Send_DID_0310(uint8 *p, uint8 len);
void Rte_Send_DID_0311(uint8 *p, uint8 len);
void Rte_Send_DID_0312(uint8 *p, uint8 len);
void Rte_Send_DID_0313(uint8 *p, uint8 len);
void Rte_Send_DID_0314(uint8 *p, uint8 len);
void Rte_Send_DID_0315(uint8 *p, uint8 len);
void Rte_Send_DID_0316(uint8 *p, uint8 len);
void Rte_Send_DID_0317(uint8 *p, uint8 len);
void Rte_Send_DID_0318(uint8 *p, uint8 len);
void Rte_Send_DID_0319(uint8 *p, uint8 len);
void Rte_Send_DID_0320(uint8 *p, uint8 len);
void Rte_Send_DID_0321(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0321(uint8 *p, uint8 len);
void Rte_Send_DID_0322(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0322(uint8 *p, uint8 len);
void Rte_Send_DID_0323(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0323(uint8 *p, uint8 len);
void Rte_Send_DID_0324(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0324(uint8 *p, uint8 len);
void Rte_Send_DID_0325(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0325(uint8 *p, uint8 len);
void Rte_Send_DID_0326(uint8 *p, uint8 len);
void Rte_Send_DID_0327(uint8 *p, uint8 len);
void Rte_Send_DID_0328(uint8 *p, uint8 len);
void Rte_Send_DID_0329(uint8 *p, uint8 len);
void Rte_Send_DID_0330(uint8 *p, uint8 len);
void Rte_Send_DID_0331(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0331(uint8 *p, uint8 len);
void Rte_Send_DID_0332(uint8 *p, uint8 len);
void Rte_Send_DID_0333(uint8 *p, uint8 len);
void Rte_Send_DID_0334(uint8 *p, uint8 len);
void Rte_Send_DID_0335(uint8 *p, uint8 len);
void Rte_Send_DID_0336(uint8 *p, uint8 len);
void Rte_Send_DID_0337(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0337(uint8 *p, uint8 len);
void Rte_Send_DID_0338(uint8 *p, uint8 len);
void Rte_Send_DID_0339(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0339(uint8 *p, uint8 len);
void Rte_Send_DID_0340(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0340(uint8 *p, uint8 len);
void Rte_Send_DID_0341(uint8 *p, uint8 len);
uint8 Rte_Get_DID_0341(uint8 *p, uint8 len);



/***********************************************************************************************************************
**                                    Rte Interface, Called by BSW.                                                   **
***********************************************************************************************************************/
/*io control test. 0-Disable, 1-Enable, 2-invalid*/
void Rte_Diag_IOControl_Test(uint16 did, uint8 cmd);

/**
  * @brief  读写DID
  * @param  p 数据指针； len 数据长度
  * @retval 无
  */
void Rte_Diag_Read_DID_F187(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F188(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F18A(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F18C(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F190(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_F190(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F163(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F180(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F19E(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_F194(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0301(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0302(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0303(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0304(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0305(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0306(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0307(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0308(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0309(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0310(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0311(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0312(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0313(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0314(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0315(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0316(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0317(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0318(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0319(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0320(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0321(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0321(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0322(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0322(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0323(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0323(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0324(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0324(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0325(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0325(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0326(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0327(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0328(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0329(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0330(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0331(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0331(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0332(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0333(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0334(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0335(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0336(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0337(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0337(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0338(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0339(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0339(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0340(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0340(uint8 *p, uint8 len);
void Rte_Diag_Read_DID_0341(uint8 *p, uint8 len);
void Rte_Diag_Write_DID_0341(uint8 *p, uint8 len);

/*routine control:FF02,Check Programming Precondition*/
boolean Rte_Diag_CheckProgrammingPrecondition(void);


/**
  * @brief  CAN通道BusOff通知
  * @param  canBus：CAN通道，0：ACAN，1：CHCAN
  * @retval 无
  */
void Rte_Com_BusOffNotify(uint8 canBus);

/**
  * @brief  CAN通道收到报文通知，每收到一帧报文通知一次
  * @param  canBus：CAN通道，0：ACAN，1：CHCAN
  *         canId：收到的报文ID
  * @retval 无
  */
void Rte_Com_RxMsgNotify(uint8 canBus, uint32 canId);



#endif /*RTE_H*/

/**********************************************************************************************************************
 *  END OF FILE: Rte.h
 *********************************************************************************************************************/
